<?php

namespace Myredis;

use \Redis;

class MyRedis
{
    private static $handler;


    private static function handler()
    {
        if (!self::$handler) {
            self::$handler = new Redis();
            self::$handler->connect('localhost', '6379');
        }
        return self::$handler;
    }

    public static function get($key)
    {
        $value = self::handler()->get($key);
        $value_serl = @unserialize($value);
        if (is_object($value_serl) || is_array($value_serl)) {
            return $value_serl;
        }
        return $value;
    }

    public static function del($key)
    {
        if(self::handler()->del($key)){
            return true;
        }else{
            return false;
        }
    }

    public static function set($key, $value)
    {
        if (is_object($value) || is_array($value)) {
            $value = serialize($value);
        }

        if (self::handler()->set($key, $value) > 0) {
            return '设置成功';
        } else {
            return '设置失败';
        }
    }


    public static function setex($key, $time, $value)
    {
        if (is_object($value) || is_array($value)) {
            $value = serialize($value);
        }

        if (self::handler()->setex($key, $time, $value) > 0) {
            return '设置成功';
        } else {
            return '设置失败';
        };
    }


    public static function hincrby($name,$id,$value){

        return self::handler()->hincrby($name,$id,$value);

    }



    public static function hset($id, $key, $value)
    {
        if (is_object($value) || is_array($value)) {
            $value = serialize($value);
        }
        self::handler()->hset($id, $key, $value);
        if(self::handler() -> hset($id,$key,$value)>0){
            return '设置成功';
        }else{
            return '设置失败';
        };
    }


    public static function hget($id, $key)
    {
        $value = self::handler()->hget($id, $key);
        $value_serl = @unserialize($value);
        if (is_object($value_serl) || is_array($value_serl)) {
            return $value_serl;
        }
        return $value;
    }

    //判断指定的字段是否存在于键中 判断hexists



    //为一个Key添加一个值。如果这个值已经在这个Key中，则返回FALSE。
    //$key 是自己名字  $value是 好友名字
    public static function sadd($key,$value){
        if(is_object($value)||is_array($value)){
            $value = serialize($value);
        }
        return self::handler() ->sadd($key,$value);
    }

    /**
     * 删除指定集合中的指定值
     * @param $key
     * @param $value
     * @return int
     */
    public static function srem($key,$value){
        if(is_array($value)|| is_object($value)){
            $value = serialize($value);
        }
        return self::handler()->srem($key,$value);
    }

    /**
     * 判断指定值是否存在集合中
     * @param $key
     * @param $value
     * @return bool
     */
    public static function sismber($set,$value){
        $res = self::handler()->sismember($set,$value);
        if($res>0){
            return true;
        }else{
            return false;
        }
    }
    /*
     * 获取集合中的所有元素
     */
    public static function smembers($key){
        $value = self::handler() -> smembers($key);
        $value_serl = @unserialize($value);
        if(is_object($value_serl)||is_array($value_serl)){
            return $value_serl;
        }
        return $value;
    }

    /**
     * 将set1集合和set2 集合的差集存入onput中
     * @param $onput
     * @param $set1
     * @param $set2
     * @return bool
     */
    public static function sdiff($onput,$set1,$set2){

       $res  =  self::handler()->sdiff($onput,$set1,$set2);
       if($res>0){
           return true;
       }else{
           return false;
       }
    }

    /**
     * 返回集合中的成功数量
     * @param $set
     * @return int|string
     */
    public static function scard($set){
        $res  = self::handler()->scard($set);
        if($res){
            return $res;
        }else{
            return '集合不存在';
        }
    }
    // 设置过期时间
    // $key  要设置的键名
    // $second 生命周期 
    public static function settime($key,$second){
        $value = self::handler() -> expire($key,$second);
        return $value;
    }


}
